package controllDAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import controllBen.Comentarios;
import controllBen.InterfaceCRUD;
import controllBen.Leitor;

public class DaoComentarios extends DaoConnection implements
		InterfaceCRUD<Comentarios> {

	public DaoComentarios() throws ClassNotFoundException {
		super();
	}

	Connection conn = null;
	PreparedStatement ps = null;
	ResultSet rs = null;
	String sql = null;

	@Override
	public void insert(Comentarios objeto) {

		sql = "INSERT INTO comentarios(id, comentario, data_comentario, id_quem_comentou) VALUES (NEXTVAL('seq_comentarios'), ?, ?, ?)";

		try {
			conn = getConnection();
			ps = conn.prepareStatement(sql);

			ps.setString(1, objeto.getComentario());
			ps.setTimestamp(2, new java.sql.Timestamp(objeto
					.getDataComentario().getTime()));
			ps.setInt(3, objeto.getLeitor().getId());

			ps.execute();

			ps.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	@Override
	public void update(Comentarios objeto) {
		sql = "UPDATE comentarios"
				+ "set comentario = ?, data_comentario = ?, id_quem_comentou = ?"
				+ "WHERE id = ?";

		try {
			conn = getConnection();
			ps = conn.prepareStatement(sql);

			ps.setString(1, objeto.getComentario());
			ps.setTimestamp(2, new java.sql.Timestamp(objeto
					.getDataComentario().getTime()));
			ps.setInt(3, objeto.getLeitor().getId());

			ps.setInt(4, objeto.getId());

			ps.execute();

			ps.close();
			conn.close();

		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	@Override
	public void delete(int id) {
		sql = "DELETE from comentarios WHERE id = ?";

		try {
			conn = getConnection();
			ps = conn.prepareStatement(sql);

			ps.setInt(1, id);

			ps.execute();

			ps.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public Comentarios getId(int id) {
		sql = "select com.id, com.comentario, com.data_comentario, lei.nome leitor from comentarios com"
				+ "join leitor lei on lei.id = id_quem_comentou WHERE id = ?";

		Comentarios comentarios = new Comentarios();

		try {
			conn = getConnection();
			ps = conn.prepareStatement(sql);

			ps.setInt(1, comentarios.getId());

			rs = ps.executeQuery();

			comentarios.setId(rs.getInt("id"));
			comentarios.setComentario(rs.getString("comentario"));
			comentarios.setDataComentario(rs.getTimestamp("data_comentario"));
			Leitor leitor = new Leitor();
			leitor.setNome(rs.getString("leitor"));
			comentarios.setLeitor(leitor);

			ps.close();
			rs.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return comentarios;
	}

	@Override
	public ArrayList<Comentarios> listaTodos() {
		sql = "select com.id, com.comentario, com.data_comentario, lei.nome as leitor from comentarios com join leitor lei on lei.id = id_quem_comentou ORDER BY com.data_comentario desc";
		ArrayList<Comentarios> lista = new ArrayList<>();

		try {
			conn = getConnection();
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			while (rs.next()) {
				Comentarios comentario = new Comentarios();
				comentario.setId(rs.getInt("id"));
				comentario.setComentario(rs.getString("comentario"));
				comentario.setDataComentario(rs.getTimestamp("data_comentario"));
				Leitor leitor = new Leitor();
				leitor.setNome(rs.getString("leitor"));
				comentario.setLeitor(leitor);
				lista.add(comentario);
			}

			conn.close();
			ps.close();
			rs.close();

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return lista;
	}

	@Override
	public ArrayList<Comentarios> getData() {
		sql = "select com.id, com.comentario, com.data_comentario, lei.nome as leitor from comentarios com join leitor lei on lei.id = id_quem_comentou ORDER BY com.data_comentario desc LIMIT 7";
		ArrayList<Comentarios> lista = new ArrayList<>();

		try {
			conn = getConnection();
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			while (rs.next()) {
				Comentarios comentario = new Comentarios();
				comentario.setId(rs.getInt("id"));
				comentario.setComentario(rs.getString("comentario"));
				comentario.setDataComentario(rs.getTimestamp("data_comentario"));
				Leitor leitor = new Leitor();
				leitor.setNome(rs.getString("leitor"));
				comentario.setLeitor(leitor);
				lista.add(comentario);
			}

			conn.close();
			ps.close();
			rs.close();

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return lista;
	}
}
